package com.kehutong.charge.service;

import com.kehutong.charge.entity.ChargeOperationLog;
import com.kehutong.charge.entity.ChargeProjectConfig;
import com.kehutong.charge.service.impl.CommonServiceImpl;
import com.kehutong.charge.util.enums.ChargeLogEnum;
import org.coraframework.inject.ImplementedBy;
import org.coraframework.json.JSONObject;
import org.coraframework.orm.jdbc.Page;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;

/**
 * @program: kht
 * @description: 公共组件服务接口
 * @author: joneron
 * @create: 2021/7/12
 **/
@ImplementedBy(CommonServiceImpl.class)
public interface CommonService {

    /**
     * 日志列表查询
     */
    Object findLoggerList(JSONObject jsonObject);

    /**
     * 添加日志
     * @param functionNo 功能编号
     * @param module 模块
     * @param function 功能
     * @param status 状态
     * @param billState 账单状态
     * @param desc 说明
     * @param optName 操作人
     * @return
     */
    Object insetLogger(String functionNo,String module, String function,
                       String billState,String status, String desc,String optName);

    /**
     * 收费配置组件
     */
    Object findFeeConfigList(JSONObject jsonObject);

    /**
     * 费用计算
     * @param  cpconfig 费用配置项对象
     * @param number 使用量
     * @param bid 状态id
     */
    BigDecimal calcFeeCommon(ChargeProjectConfig cpconfig,BigDecimal number,String bid);

    /**
     * 字典数据修改
     */
    Object updateDict(JSONObject jsonObject);

    /**
     * 查询字典数据
     */
    Object findDict(JSONObject jsonObject);


    /** ****************************  定时任务  *********************** *****/
    /**
     * 常规订单超时，默认30分钟，每分钟执行一次
     */
    void updateOrderTask() throws Exception;

    /**
     * 临时订单超时，默认30分钟，每分钟执行一次
     */
    Object updateOrderInterimTask() throws Exception;

    /**
     * 违约金定时任务，每天执行一次
     */
    Object updatePenaltyTask() throws Exception;

    /**
     * 每个月1号生成仪表数据
     */
    Object addMeterDataTask();

    void pageExport(HttpServletRequest req, HttpServletResponse resp, JSONObject jsonObject);
}
